package cn.iocoder.yudao.module.member.enums.point;

import cn.hutool.core.util.EnumUtil;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;

/**
 * 会员的签力值（余额）类型枚举
 *
 * @author 芋道源码
 */
@AllArgsConstructor
@Getter
public enum MemberPointBizTypeEnum implements IntArrayValuable {

//    SIGN(1, "签到", "签到获得 {} 积分", true),
    ADMIN_ADD_POINT(5, "管理员修改增加积分", "管理员修改 {} 签力值",true,false),
    ADMIN_REDUCE_POINT(5, "管理员修改减少积分", "管理员修改 {} 签力值",false,false),
    ADMIN_ADD_DEVICE(5, "管理员修改增加设备数", "管理员修改 {} 设备数",true,false),
    ADMIN_REDUCE_DEVICE(5, "管理员修改减少设备数", "管理员修改 {} 设备数",false,false),

//
//    ORDER_USE(11, "订单积分抵扣", "下单使用 {} 积分", false), // 下单时，扣减积分
//    ORDER_USE_CANCEL(12, "订单积分抵扣（整单取消）", "订单取消，退还 {} 积分", true), // ORDER_USE 的取消
//    ORDER_USE_CANCEL_ITEM(13, "订单积分抵扣（单个退款）", "订单退款，退还 {} 积分", true), // ORDER_USE 的取消
//
//    ORDER_GIVE(21, "订单积分奖励", "下单获得 {} 积分", true), // 支付订单时，赠送积分
//    ORDER_GIVE_CANCEL(22, "订单积分奖励（整单取消）", "订单取消，退还 {} 积分", false), // ORDER_GIVE 的取消
//    ORDER_GIVE_CANCEL_ITEM(23, "订单积分奖励（单个退款）", "订单退款，扣除赠送的 {} 积分", false), // ORDER_GIVE 的取消，
    ADD_RECHARGE(1, "充值签力值", "充值获得 {} 签力值",true,false),
    ADD_DEVICE(2, "充值设备数", "充值获得 {} 设备数",true,false),
    REDUCE_RECHARGE(3, "使用签力值", "购买证书使用获得 {} 签力值",false,false),

    REDUCE_RECHARGE_ORDER(5, "使用签力值", "上传证书使用获得 {} 签力值",false,false),
    REDUCE_DEVICE(4, "使用设备数", "使用抵扣 {} 设备数",false,false),

    //设备管理下单
    REDUCE_DEVICE_SPENDING_POWER(11, "平台购买证书的总费用", "平台购买证书的总费用{}",false,true),
    //在线充值购买设备
    REDUCE_ORDER_SPENDING_POWER(12, "平台购买设备号总费用", "平台购买设备号总费用{}",false,true),
    REDUCE_UP_P8_SPENDING_POWER(13, "独立池托管P8费用", "独立池托管P8费用{}",false,true),
    REDUCE_UP_P12_SPENDING_POWER(14, "独立池上传P12证书费用", "独立池上传P12证书费用{}",false,true),
    ;




//    首页消费力统计的时候漏了一块儿：消费力=平台购买证书的总费用+平台购买设备号总费用+独立池托管P8费用+独立池上传P12证书费用
    /**
     * 类型
     */
    private final Integer type;
    /**
     * 名字
     */
    private final String name;
    /**
     * 描述
     */
    private final String description;
    /**
     * 是否为扣减积分
     */
    private final boolean add;

    /**
     * 是否增加消费力
     */
    private final boolean spendingPowerFlag;

    @Override
    public int[] array() {
        return new int[0];
    }

    public static MemberPointBizTypeEnum getByType(Integer type) {
        return EnumUtil.getBy(MemberPointBizTypeEnum.class,
                e -> Objects.equals(type, e.getType()));
    }

}
